<?php

/**
 * Contact form base class.
 *
 * @method Contact getObject() Returns the current form's model object
 *
 * @package    tfe
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormGeneratedTemplate.php 24171 2009-11-19 16:37:50Z Kris.Wallsmith $
 */
class RepresentationsInsAbonnement extends BaseForm {

    private static $ins_abonnement;
    private static $nb_spectacles;

    // Constructeur prenant en paramètre une inscriptionAbonnement
    public function __construct($ins = null) {
        if($ins == null) {
            throw new Exception('Vous devez passer une inscriptionAbonnement au constructeur');
        } else {
            self::$ins_abonnement = $ins;
            parent::__construct();
        }
    }

    // Méthode équivalente à celle Forms
    public function configure() {

        // fonction qui crée un widget de type "select" pour chaque spectacle de l'abonnement de la personne
        // chaque select a comme options les dates de représentation de ces spectacles
        // l'option par défaut est la réservation existante pour la personne (au départ, le jour par défaut de l'ins_abonnement)

        // créer un formulaire dynamiquement d'après l'abonnement choisi par la personne avant
        $spectacles = self::$ins_abonnement->getAbonnement()->getSpectacles();
        self::$nb_spectacles = count($spectacles);
        $idx = 0;
        foreach($spectacles as $spectacle) {
            $representations = $spectacle->getRepresentationSpectacle(); // c'est une collection
            // créer la liste des dates pour un spectacle (= créer le contenu du select checkbox d'un spectacle)
            $liste_dates = array();
            foreach($representations as $representation) {

                $liste_dates[$representation->getId()] = strftime('%A %e %B %g',strtotime($representation->getDate()));

                // récupérer les réservations déjà faites pour les afficher comme défaut
                if(self::$ins_abonnement->getIdContact()) {
                    $reservation = Doctrine_Query::create()
                            ->from('Reservation')
                            ->where('id_contact = ?', self::$ins_abonnement->getIdContact())
                            ->andWhere('id_evenement = ?', $representation->getId())
                            ->execute();
                }else {
                    if(self::$ins_abonnement->getIdGroupe()) {
                        $reservation = Doctrine_Query::create()
                                ->from('Reservation')
                                ->where('id_groupe = ?', self::$ins_abonnement->getIdGroupe())
                                ->andWhere('id_evenement = ?', $representation->getId())
                                ->execute();
                    }else {
                        throw new Exception('La réservation ne contient ni id_contact ni id_groupe !!');
                    }
                }
                // récupérer le record (la méthode getFirst() ne fonctionne pas)
                foreach($reservation as $res) {
                    $id_representation = $res->getIdEvenement();
                }
            }
            $this->widgetSchema['spectacle_'. $idx] = new sfWidgetFormChoice(array('choices' => $liste_dates));
            $this->widgetSchema['spectacle_'. $idx]->setOption('label',$spectacle->getTitre());
            if(isset($id_representation)){ // test car s'il n'y a pas de réservation enregistrées, la variable n'est pas initialisée
                $this->setDefault('spectacle_'. $idx, $id_representation);
            }

            $this->validatorSchema['spectacle_'. $idx] = new sfValidatorDoctrineChoice(array('model' => 'Representation'));

            $idx++;
        }
    }

    public function getInsAbonnement() {
        return self::$ins_abonnement;
    }

    public function getNbSpectacles() {
        return self::$nb_spectacles;
    }


}
